package com.surfacing.rcp.db.dao.factory;

import com.surfacing.rcp.db.dao.AnforderungDAO;
import com.surfacing.rcp.db.dao.DienststelleDAO;
import com.surfacing.rcp.db.dao.DoctorDAO;
import com.surfacing.rcp.db.dao.EinsatzartDAO;
import com.surfacing.rcp.db.dao.JournalDAO;
import com.surfacing.rcp.db.dao.NacaDAO;
import com.surfacing.rcp.db.dao.NfsDAO;
import com.surfacing.rcp.db.dao.ProtokollNrDAO;
import com.surfacing.rcp.db.dao.StatAnforderungDAO;
import com.surfacing.rcp.db.dao.StatDienststelleDAO;
import com.surfacing.rcp.db.dao.StatDoctorDAO;
import com.surfacing.rcp.db.dao.StatEinsatzartDAO;
import com.surfacing.rcp.db.dao.StatNacaDAO;
import com.surfacing.rcp.db.dao.StatNfsDAO;
import com.surfacing.rcp.db.dao.StatTransportzielDAO;
import com.surfacing.rcp.db.dao.TransportzielDAO;
import com.surfacing.rcp.db.dao.UserDAO;
import com.surfacing.rcp.db.dao.UserLoginDAO;

/**
 * We can make the Data Access Object creation more flexible by adopting the
 * Abstract Factory pattern.
 */
public interface DaoFactory {
	// the provided factories
	final DaoFactoryMySql MYSQL = new DaoFactoryMySql();

	// the provided factory methods
	public NfsDAO createNfsDAO();

	public DoctorDAO createDoctorDAO();

	public AnforderungDAO createAnforderungDAO();

	public NacaDAO createNacaDAO();

	public TransportzielDAO createTransportzielDAO();

	public DienststelleDAO createDienststelleDAO();

	public EinsatzartDAO createEinsatzartDAO();

	public JournalDAO createJournalDAO();

	public UserLoginDAO createUserDAO();

	public UserDAO createStaffMemberDAO();

	public StatNfsDAO createStatNfsDAO();

	public StatDoctorDAO createStatDoctorDAO();

	public StatEinsatzartDAO createStatEinsatzartDAO();

	public StatTransportzielDAO createStatTransportzielDAO();

	public StatAnforderungDAO createStatAnforderungDAO();

	public StatDienststelleDAO createStatDienststelleDAO();

	public StatNacaDAO createStatNacaDAO();
	
	public ProtokollNrDAO createProtokollNrDAO();

}
